package edu.nf.dbutil.converter;

import edu.nf.dbutil.TypeConverter;

import java.sql.Date;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 将数据库中任意时间类型转换为 LocalDate
 * @author yang
 * @date 2024-05-09
 */
public class LocalDateConverter implements TypeConverter {
    /**
     * 判断实体类字段类型是否是 LocalDate.class 的实例
     * @param type 转换类型
     * @return
     */
    @Override
    public boolean supports(Class<?> type) {
        return type.equals(LocalDate.class);
    }

    /**
     * 将数据库时间数据转换为 LocalDate 类型
     * @param fieldType 字段的 Class 类型
     * @param value 结果集获取的数据
     * @return
     * 判断数据库时间数据 value 是 "java.time.LocalDate"、"java.time.LocalDateTime"、
     * "java.util.Date" 或 "java.sql.Timestamp" 的实例并返回对应转换后的 LocalDate 对象
     */
    @Override
    public Object convert(Class<?> fieldType, Object value) {
        return switch(value){
            case LocalDate localDate -> localDate;
            case LocalDateTime localDateTime -> localDateTime.toLocalDate();
            case Date sqlDate -> sqlDate.toLocalDate();
            case Timestamp timestamp -> timestamp.toLocalDateTime().toLocalDate();
            default -> null;
        };
    }
}
